#include <my_header.h>
// 子进程往有名管道写数据 sleep(1) 父进程读子进程刚写入
// 的数据 sleep(1) 父进程再往管道写数据 子进程在读
// 父进程读的:hello 子进程:ok
/* Usage: ./1_named_pipes*/
int main(void){                                  
    // 创建有名管道，并设置权限
    mkfifo("myfifo",0600 );
    // 打开
    int fd = open("myfifo", O_RDWR);
    ERROR_CHECK(fd, -1, "open");

    int pipe_fd = fork();   // 创建子进程
    ERROR_CHECK(pipe_fd, -1, "fork");

    if(pipe_fd == 0){
        // 子进程
        // 往管道写数据
        write(fd, "Hello",5);
        sleep(1);
        // 子进程读数据
        char buf[5] = { 0 };
        read(fd, buf, sizeof(buf));
        printf("child: %s\n", buf);
    }else
    {
        // 父进程
        // 父进程读数据
        char buf[5] = { 0 };
        read(fd, buf, sizeof(buf));
        printf("main :%s\n", buf);

        //
        sleep(1);
        write(fd, "ok", 2);
    }
    // 删除管道
    // 返回值：成功：0 失败:-1
    unlink("myfifo");
    return 0;
}


